<!DOCTYPE HTML>

<html lang="en">
<head>

<title>AbstractPasswordEncoder (spring-security-docs 5.6.3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="AbstractPasswordEncoder (spring-security-docs 5.6.3 API)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":10,"i1":6,"i2":10,"i3":9,"i4":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">

<div class="topNav"><a id="navbar.top">

</a>
<div class="skipNav"><a href="AbstractPasswordEncoder.html#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">

</a></div>

</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>

<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.springframework.security.crypto.password</a></div>
<h2 title="Class AbstractPasswordEncoder" class="title">Class AbstractPasswordEncoder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.springframework.security.crypto.password.AbstractPasswordEncoder</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="PasswordEncoder.html" title="interface in org.springframework.security.crypto.password">PasswordEncoder</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">AbstractPasswordEncoder</span>
extends java.lang.Object
implements <a href="PasswordEncoder.html" title="interface in org.springframework.security.crypto.password">PasswordEncoder</a></pre>
<div class="block">Abstract base class for password encoders</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">

</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#%3Cinit%3E()">AbstractPasswordEncoder</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">

</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#encode(java.lang.CharSequence)">encode</a></span>&#8203;(java.lang.CharSequence&nbsp;rawPassword)</code></th>
<td class="colLast">
<div class="block">Encode the raw password.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected abstract byte[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#encode(java.lang.CharSequence,byte%5B%5D)">encode</a></span>&#8203;(java.lang.CharSequence&nbsp;rawPassword,
byte[]&nbsp;salt)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected byte[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#encodeAndConcatenate(java.lang.CharSequence,byte%5B%5D)">encodeAndConcatenate</a></span>&#8203;(java.lang.CharSequence&nbsp;rawPassword,
byte[]&nbsp;salt)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#matches(byte%5B%5D,byte%5B%5D)">matches</a></span>&#8203;(byte[]&nbsp;expected,
byte[]&nbsp;actual)</code></th>
<td class="colLast">
<div class="block">Constant time comparison to prevent against timing attacks.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractPasswordEncoder.html#matches(java.lang.CharSequence,java.lang.String)">matches</a></span>&#8203;(java.lang.CharSequence&nbsp;rawPassword,
java.lang.String&nbsp;encodedPassword)</code></th>
<td class="colLast">
<div class="block">Verify the encoded password obtained from storage matches the submitted raw
password after it too is encoded.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">

</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.springframework.security.crypto.password.PasswordEncoder">

</a>
<h3>Methods inherited from interface&nbsp;org.springframework.security.crypto.password.<a href="PasswordEncoder.html" title="interface in org.springframework.security.crypto.password">PasswordEncoder</a></h3>
<code><a href="PasswordEncoder.html#upgradeEncoding(java.lang.String)">upgradeEncoding</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">

</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>AbstractPasswordEncoder</h4>
<pre>protected&nbsp;AbstractPasswordEncoder()</pre>
</li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">

</a>
<h3>Method Detail</h3>
<a id="encode(java.lang.CharSequence)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>encode</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;encode&#8203;(java.lang.CharSequence&nbsp;rawPassword)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PasswordEncoder.html#encode(java.lang.CharSequence)">PasswordEncoder</a></code></span></div>
<div class="block">Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 or
greater hash combined with an 8-byte or greater randomly generated salt.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="PasswordEncoder.html#encode(java.lang.CharSequence)">encode</a></code>&nbsp;in interface&nbsp;<code><a href="PasswordEncoder.html" title="interface in org.springframework.security.crypto.password">PasswordEncoder</a></code></dd>
</dl>
</li>
</ul>
<a id="matches(java.lang.CharSequence,java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>matches</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;matches&#8203;(java.lang.CharSequence&nbsp;rawPassword,
                       java.lang.String&nbsp;encodedPassword)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PasswordEncoder.html#matches(java.lang.CharSequence,java.lang.String)">PasswordEncoder</a></code></span></div>
<div class="block">Verify the encoded password obtained from storage matches the submitted raw
password after it too is encoded. Returns true if the passwords match, false if
they do not. The stored password itself is never decoded.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="PasswordEncoder.html#matches(java.lang.CharSequence,java.lang.String)">matches</a></code>&nbsp;in interface&nbsp;<code><a href="PasswordEncoder.html" title="interface in org.springframework.security.crypto.password">PasswordEncoder</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rawPassword</code> - the raw password to encode and match</dd>
<dd><code>encodedPassword</code> - the encoded password from storage to compare with</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the raw password, after encoding, matches the encoded password from
storage</dd>
</dl>
</li>
</ul>
<a id="encode(java.lang.CharSequence,byte[])">

</a>
<ul class="blockList">
<li class="blockList">
<h4>encode</h4>
<pre class="methodSignature">protected abstract&nbsp;byte[]&nbsp;encode&#8203;(java.lang.CharSequence&nbsp;rawPassword,
                                 byte[]&nbsp;salt)</pre>
</li>
</ul>
<a id="encodeAndConcatenate(java.lang.CharSequence,byte[])">

</a>
<ul class="blockList">
<li class="blockList">
<h4>encodeAndConcatenate</h4>
<pre class="methodSignature">protected&nbsp;byte[]&nbsp;encodeAndConcatenate&#8203;(java.lang.CharSequence&nbsp;rawPassword,
                                      byte[]&nbsp;salt)</pre>
</li>
</ul>
<a id="matches(byte[],byte[])">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>matches</h4>
<pre class="methodSignature">protected static&nbsp;boolean&nbsp;matches&#8203;(byte[]&nbsp;expected,
                                 byte[]&nbsp;actual)</pre>
<div class="block">Constant time comparison to prevent against timing attacks.</div>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>

<footer role="contentinfo">
<nav role="navigation">

<div class="bottomNav"><a id="navbar.bottom">

</a>
<div class="skipNav"><a href="AbstractPasswordEncoder.html#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractPasswordEncoder.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">

</a></div>

</nav>
</footer>
<script>if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7040cebfba0e980c","token":"bffcb8a918ae4755926f76178bfbd26b","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
</body>
</html>
